package com.unionftech.common.common.language

import android.content.Context
import android.content.res.Configuration
import android.text.TextUtils
import com.unionftech.common.CommonConstants
import com.unionftech.common.utils.LogUtils
import com.unionftech.common.utils.SpUtils
import java.util.Locale


object DynamicLanguageLoader {
    private const val TAG = "DynamicLanguageLoader"
    private val appSupportLanguageRange = listOf(
        "zh-CN",// 简体中文
        "zh-TW",// 繁体中文
        "en", // 英语
        "vn", // 越南语 "vi"
        "th", // 泰国
        "my", // 马来西亚 ms
        "ko", // 韩语
        "ja", // 日语
        "fr", // 法语
        "pt", // 葡萄牙语
        "es", // 西班牙语
        "ar", // 阿拉伯语
        "de", // 德语
        "fa", // 波斯语 pamm无此语言
        "it", // 意大利语
        "hi", // 印度语
        "ru", // 俄语
    )

    @JvmStatic
    fun applyLanguage(context: Context, languageCode: String) {
        //设置语言
        val locale = Locale(languageCode)
        Locale.setDefault(locale)
        val configuration = Configuration(context.resources.configuration)
        configuration.setLocale(locale)
        context.createConfigurationContext(configuration)
        SpUtils.getInstance().put(CommonConstants.Key.KEY_APP_LANGUAGE_CODE, languageCode)
        //加载动态语言资源
        DynamicResourceManager.loadDynamicStrings(languageCode)
    }

    /**
     * 获取系统当前的语言和地区代码（例如 "en-US" 或 "zh-CN"）
     */
    @JvmStatic
    fun getSystemLocaleForLanguageCode(): String {
        val defaultLocale = Locale.getDefault()
        val language = defaultLocale.language
        val country = defaultLocale.country
        var lastLanguage = if (language == "zh") {
            //更换中国的地区的语言
            val languageTag = defaultLocale.toLanguageTag()
            LogUtils.d("getSystemLocaleForLanguageCode-->languageTag:${languageTag}")
            if (languageTag.contains("zh-Hant")
                || languageTag.contains("zh-TW")
                || languageTag.contains("zh-HK")
                || languageTag.contains("zh-MO")
            ) {
                // 繁体中文
                "$language-TW"
            } else {
                // 简体中文
                "$language-CN"
            }
        } else if (language == "vi") {
            //越南语
            "vn"
        } else if (language == "ms") {
            //马来西亚
            "my"
        } else {
            //如果app不支持的语言默认展示en
            if (!appSupportLanguageRange.contains(language)) {
                "en"
            } else {
                language
            }
        }
        /* else {
             "en"
         }*/
        LogUtils.d("getSystemLocaleForLanguageCode-->language:${language}")
        LogUtils.d("getSystemLocaleForLanguageCode-->country:${country}")
        LogUtils.d("getSystemLocaleForLanguageCode-->lastLanguage:${lastLanguage}")
        return lastLanguage
    }

    /**
     * 获取当前的语言code
     */
    @JvmStatic
    fun getCurLanguageCode(): String {
        var languageCode =
            SpUtils.getInstance().getString(CommonConstants.Key.KEY_APP_LANGUAGE_CODE)
        val systemLanguageCode = getSystemLocaleForLanguageCode()
        if (TextUtils.isEmpty(languageCode) || !TextUtils.equals(
                languageCode, systemLanguageCode
            )
        ) {
            languageCode = systemLanguageCode
        }
        return languageCode
    }

    @JvmStatic
    fun printSystemLocale() {
        val locales = Locale.getAvailableLocales()
        for (locale in locales) {
            LogUtils.d(TAG, "Default Locale: " + locale.language + "-" + locale.country)
            LogUtils.d(TAG, "Display Language: " + locale.displayLanguage)
            LogUtils.d(TAG, "Display Country: " + locale.displayCountry)
            LogUtils.d(TAG, "======================================================\n")
        }
    }
}